package com.superman.supermarket.client.event;

import java.util.Map;

import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.superman.supermarket.client.event.PreorderPageEvent.PreorderPageEventHandler;

/**
 * 提交订单页面事件定义
 * 
 * @author superman
 * @version 2018年7月12日下午4:21:31
 */
public class PreorderPageEvent extends GwtEvent<PreorderPageEventHandler> {

	/**
	 * 事件处理器
	 * 
	 * @author superman
	 * @version 2018年7月12日下午4:22:00
	 */
	public interface PreorderPageEventHandler extends EventHandler {
		/**
		 * 调准到商品详情页面
		 * 
		 * @author superman
		 * @version 2018年8月22日 上午12:29:29
		 * @param map
		 */
		void pushToSkuDetailPage(Map<String, Object> map);

		/**
		 * 调准到店铺页面
		 * 
		 * @author superman
		 * @version 2018年8月22日 上午12:29:33
		 * @param storeid
		 */
		void pushToStorePage(String storeid);

		/**
		 * 重制默认的优惠券id
		 * 
		 * @author superman
		 * @version 2018年8月19日 下午9:42:21
		 * @param obj
		 */
		void resetCouponId(String obj);

		/**
		 * 结算
		 * 
		 * @author superman
		 * @version 2018年8月4日 下午8:43:56
		 * @param couponid
		 */
		void settlementByCoupon(String couponid);
	}

	/**
	 * 页面事件类型定义
	 * 
	 * @author superman
	 * @version 2018年8月4日下午8:40:11
	 */
	public enum PreorderPageEventType {
		/** 点击了商品 */
		CLICK_SKU,
		/** 点击店铺 */
		CLICK_STORE,
		/** 解析完成默认的优惠券id */
		POP_DEFAULT_COUPON,
		/** 选择优惠券重新结算 */
		SETTLEMENT_BY_COUPON
	}

	public static final Type<PreorderPageEventHandler> TYPE = new Type<PreorderPageEventHandler>();

	private Object obj;

	private PreorderPageEventType type;

	/**
	 * 构造方法
	 * 
	 * @author superman
	 * @version 2018年8月19日 下午8:49:00
	 * @param obj
	 * @param type
	 */
	public PreorderPageEvent(Object obj, PreorderPageEventType type) {
		this.obj = obj;
		this.type = type;
	}

	@Override
	protected void dispatch(PreorderPageEventHandler handler) {
		switch (type) {
			case SETTLEMENT_BY_COUPON:
				handler.settlementByCoupon((String) obj);
				break;
			case POP_DEFAULT_COUPON:
				handler.resetCouponId((String) obj);
				break;
			case CLICK_STORE:
				handler.pushToStorePage((String) obj);
				break;
			case CLICK_SKU:
				handler.pushToSkuDetailPage((Map<String, Object>) obj);
				break;
			default:
				break;
		}

	}

	@Override
	public Type<PreorderPageEventHandler> getAssociatedType() {
		return TYPE;
	}

}
